a11y: Defer to the GtkAccessible's implementation
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 11 Nov 2020 19:37:26 +0000 (19:37 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 11 Nov 2020 19:45:43 +0000 (19:45 +0000)
Since GtkATContexts are now lazily realized, we need to go through the
GtkAccessible's implementation to access the :accessible-role property,
in case there are fallbacks.

gtk/gtkaccessible.c
gtk/gtktestatcontext.c

index e9f8d7d663696ee33ff3cd02635a885f730240bd..991bc02756c91dea9abd29b5885fafffd1aba490 100644 (file)
@@ -104,13 +104,17 @@ gtk_accessible_get_at_context (GtkAccessible *self)
 GtkAccessibleRole
 gtk_accessible_get_accessible_role (GtkAccessible *self)
 {
+  GtkAccessibleRole role;
+
   g_return_val_if_fail (GTK_IS_ACCESSIBLE (self), GTK_ACCESSIBLE_ROLE_NONE);
 
   GtkATContext *context = gtk_accessible_get_at_context (self);
-  if (context == NULL)
-    return GTK_ACCESSIBLE_ROLE_NONE;
+  if (context != NULL && gtk_at_context_is_realized (context))
+    return gtk_at_context_get_accessible_role (context);
+
+  g_object_get (G_OBJECT (self), "accessible-role", &role, NULL);
 
-  return gtk_at_context_get_accessible_role (context);
+  return role;
 }
 
 /**
index c8bd222d1a6be06280ef35e1adf732c359516a4a..27ad90da6778374fbed22bdd9709244734110122 100644 (file)
@@ -118,15 +118,9 @@ gboolean
 gtk_test_accessible_has_role (GtkAccessible     *accessible,
                               GtkAccessibleRole  role)
 {
-  GtkATContext *context;
-
   g_return_val_if_fail (GTK_IS_ACCESSIBLE (accessible), FALSE);
 
-  context = gtk_accessible_get_at_context (accessible);
-  if (context == NULL)
-    return FALSE;
-
-  return gtk_at_context_get_accessible_role (context) == role;
+  return gtk_accessible_get_accessible_role (accessible) == role;
 }
 
 gboolean